﻿using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using T.FAS.Runtime.Base.Common;
using T.FAS.Runtime.Metadata.Entity.Page;

namespace T.FAS.Runtime.Page.Dao
{
    public class PageTemplateLogic
    {
        readonly PageTemplateDao pageTemplateDao = new PageTemplateDao();
        readonly PageTemplateGroupDao pageTemplateGroupDao = new PageTemplateGroupDao();
        readonly PageTemplateReplaceDefineDao templateReplaceDefineDao = new PageTemplateReplaceDefineDao();
        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="pageTemplate"></param>
        public void CreateOrUpdatePageTemplate(PageTemplate pageTemplate)
        {
            string UserName = UserUtil.GetCurrentUserName();
            pageTemplate.PageType = pageTemplate.PageMetaData.Header.PageType;
            pageTemplate.ClientType = pageTemplate.PageMetaData.Header.ClientType;
            pageTemplate.LastModifyTime = DateTime.Now;
            pageTemplate.LastModifier = UserName;
            pageTemplate.UserID = UserUtil.GetCurrentUserID();
            pageTemplate.TenantID = UserUtil.GetCurrentUserTenantId();

            if (string.IsNullOrEmpty(pageTemplate.ID))
            {
                pageTemplate.ID = Guid.NewGuid().ToString();
                pageTemplate.CreateTime = DateTime.Now;
                pageTemplate.Creator = UserName;
                pageTemplate.Content = JsonConvert.SerializeObject(pageTemplate.PageMetaData);
                pageTemplateDao.Add(new List<object> { pageTemplate });
                foreach (var item in pageTemplate.TemplateReplaceDefines)
                {
                    item.ID = Guid.NewGuid().ToString();
                    item.PageTemplateID = pageTemplate.ID;
                    item.LastModifyTime = DateTime.Now;
                    item.LastModifier = UserName;
                    item.CreateTime = DateTime.Now;
                    item.Creator = UserName;
                }
                templateReplaceDefineDao.Add(pageTemplate.TemplateReplaceDefines);
            }
            else
            {
                pageTemplate.Content = JsonConvert.SerializeObject(pageTemplate.PageMetaData);
                pageTemplateDao.Update(new List<object> { pageTemplate });
                templateReplaceDefineDao.Delete(new List<string> { pageTemplate.ID });
                foreach (var item in pageTemplate.TemplateReplaceDefines)
                {
                    item.ID = Guid.NewGuid().ToString();
                    item.PageTemplateID = pageTemplate.ID;
                    item.LastModifyTime = DateTime.Now;
                    item.LastModifier = UserName;
                    item.CreateTime = DateTime.Now;
                    item.Creator = UserName;
                }
                templateReplaceDefineDao.Add(pageTemplate.TemplateReplaceDefines);
            }
        }
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="IDs"></param>
        public void DeletePageTemplate(List<string> IDs)
        {
            pageTemplateDao.Delete(IDs);
            templateReplaceDefineDao.Delete(IDs);
        }
        /// <summary>
        /// 获取Page模板名称是否存在
        /// </summary>
        /// <param name="templateGroupID"></param>
        /// <param name="Name"></param>
        /// <param name="ID"></param>
        /// <returns></returns>
        public int CheckPageTemplateNameExist(string templateGroupID, string Name, string ID)
        {
            return pageTemplateDao.CheckPageTemplateNameExist(templateGroupID, Name, ID);
        }
        /// <summary>
        /// 获取Page模板
        /// </summary>
        /// <param name="templateID"></param>
        public PageTemplate GetPageTemplate(string templateID)
        {
            PageTemplate pageTemplate = pageTemplateDao.GetObject(templateID);
            return pageTemplate;
        }
        /// <summary>
        /// 获取模板列表
        /// </summary>
        public List<PageTemplate> GetPageTemplateList(string templateGroupID, string projectID, int engineType)
        {
            List<PageTemplate> pageTemplates = pageTemplateDao.GetPageTemplates(templateGroupID, projectID, engineType).OrderBy(t => t.SortOrder).ToList();
            return pageTemplates;
        }
        /// <summary>
        /// 获取模板分组
        /// </summary>
        /// <returns></returns>
        public List<PageTemplateGroup> GetPageTemplateGroups()
        {
            List<PageTemplateGroup> allPageTemplateGroup = pageTemplateGroupDao.GetPageTemplateGroup().OrderBy(t => t.ParentID).ThenBy(t => t.SortOrder).ToList();
            foreach (var item in allPageTemplateGroup)
            {
                if (string.IsNullOrEmpty(item.ParentID))
                {
                    item.ParentID = null;
                }
            }
            return allPageTemplateGroup;
        }
        /// <summary>
        /// 获取模板分组与明细
        /// </summary>
        /// <returns></returns>
        public List<PageTemplateGroup> GetTemplateGroups(int pageType, int templateType, int clientType, int engineType)
        {
            List<PageTemplateGroup> templateGroups = pageTemplateGroupDao.GetTemplateGroups(pageType, templateType).ToList();
            foreach (var item in templateGroups)
            {
                item.Templates = pageTemplateDao.GetPageTemplates(item.ID, pageType, templateType, clientType, engineType);
            }
            return templateGroups.OrderBy(t=>t.SortOrder).ToList();
        }
        /// <summary>
        /// 获取系统模板
        /// </summary>
        /// <returns></returns>
        public List<PageTemplate> GetSystemPageTemplate(int engineType)
        {
            List<PageTemplate> pageTemplates = pageTemplateDao.GetSystemPageTemplate(engineType).OrderBy(t => t.SortOrder).ToList();
            return pageTemplates;
        }
    }
}
